// background.js - Service Worker 中枢控制

const GLOBAL_KEY = 'ruleActEnabled';

/**
 * 1. 核心功能：切换状态，并通知所有 Content Script
 */
/**
 * 状态改变时，通知所有 Content Script 更新状态，并在启用时动态注入脚本。
 */
function notifyAllTabs(newState) {
    console.log(`[Service Worker] Global state changed to: ${newState}. Notifying all tabs.`);

    // 更新存储状态
    chrome.storage.local.set({ [GLOBAL_KEY]: newState });

    chrome.tabs.query({}, (tabs) => {
        tabs.forEach(tab => {
            // A. 发送消息通知所有 Content Script（清除定时器或获取状态）
            chrome.tabs.sendMessage(tab.id, {
                action: 'UPDATE_GLOBAL_STATE',
                isEnabled: newState
            }).catch(() => {}); // 忽略连接错误

            // B. 关键增强：如果开关被启用，并且 Tab 状态正常
            if (newState === true && tab.url && !tab.url.startsWith('chrome://')) {

                // 使用 scripting API 动态注入 Content Script 入口
                chrome.scripting.executeScript({
                    target: { tabId: tab.id },
                    files: ['content-script-loader.js']
                }).then(() => {
                    console.log(`[Service Worker] RuleAct V3 injected/restarted in Tab ${tab.id}.`);
                }).catch(e => {
                    // 忽略如 'file://' 等不安全上下文的注入错误
                    if (!e.message.includes('not allowed')) {
                        console.error(`[Service Worker] Failed to inject script into tab ${tab.id}:`, e);
                    }
                });
            }
        });
    });
    updateContextMenu(newState);
}

function toggleGlobalState() {
    chrome.storage.local.get(GLOBAL_KEY, (data) => {
        // 确保未定义时默认为 true
        const currentState = data[GLOBAL_KEY] === undefined ? true : data[GLOBAL_KEY];
        notifyAllTabs(!currentState);
    });
}

/**
 * 2. 监听生命周期和初始化
 */
chrome.runtime.onInstalled.addListener(() => {
    // 首次安装时设置默认值和菜单
    chrome.storage.local.set({ [GLOBAL_KEY]: true });
    createContextMenu(true);
});

/**
 * 3. 监听快捷键 (Command)
 */
chrome.commands.onCommand.addListener((command) => {
    if (command === '_toggle_global_switch') {
        toggleGlobalState();
    }
});

/**
 * 4. 监听右键菜单 (Context Menu)
 */
function createContextMenu(isEnabled) {
    const title = isEnabled ? 'RuleAct V3: 当前状态 [启用]' : 'RuleAct V3: 当前状态 [禁用]';
    chrome.contextMenus.create({
        id: 'toggleRuleAct',
        title: title,
        contexts: ['page']
    });
}

function updateContextMenu(isEnabled) {
    const title = isEnabled ? 'RuleAct V3: 当前状态 [启用]' : 'RuleAct V3: 当前状态 [禁用]';
    chrome.contextMenus.update('toggleRuleAct', { title: title });
}

chrome.contextMenus.onClicked.addListener((info) => {
    if (info.menuItemId === 'toggleRuleAct') {
        toggleGlobalState();
    }
});

/**
 * 5. 监听来自 Popup 的消息
 */
// **修正后的消息监听器：处理来自 Content Script 的 GET_GLOBAL_STATE 请求**
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {

    if (message.action === 'TOGGLE_GLOBAL_STATE') {
        notifyAllTabs(message.isEnabled);
        sendResponse({ success: true });
    }

    // **处理 Content Script 请求初始状态**
    if (message.action === 'GET_GLOBAL_STATE') {
        chrome.storage.local.get(GLOBAL_KEY, (data) => {
            // 确保返回正确的初始值（undefined 时默认为 true）
            const isEnabled = data[GLOBAL_KEY] === undefined ? true : data[GLOBAL_KEY];
            sendResponse({ isEnabled: isEnabled });
        });

        // 关键：返回 true 告诉 Chrome，sendResponse 将被异步调用
        return true;
    }
});